package code_rhapsody.array;

/**
 * @author Synhard
 * @version 1.0
 * @class Code14
 * @description 59. 螺旋矩阵 II
 * 给你一个正整数 n ，生成一个包含 1 到 n^2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 *
 *  
 *
 * 示例 1：
 *
 *
 * 输入：n = 3
 * 输出：[[1,2,3],[8,9,4],[7,6,5]]
 * 示例 2：
 *
 * 输入：n = 1
 * 输出：[[1]]
 *  
 *
 * @tel 13001321080
 * @email 823436512@qq.com
 * @date 2021-07-25 7:29
 */
public class Code14 {
    public static void main(String[] args) {
        System.out.println(generateMatrix(2));
    }

    public static int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        int time = n >> 1, left = 0, top = 0, right = n - 1, bottom = n - 1, val = 1;
        while (time > 0) { // 最外层的循环控制赋值的次数
            for (int i = left; i <= right; i++) { // 给上面一行赋值
                matrix[top][i] = val++;
            }
            top++;

            for (int i = top; i <= bottom; i++) { // 给右面一列赋值
                matrix[i][right] = val++;
            }
            right--;

            for (int i = right; i >= left; i--) { // 给下面一行赋值
                matrix[bottom][i] = val++;
            }
            bottom--;

            for (int i = bottom; i >= top; i--) {
                matrix[i][left] = val++;
            }
            left++;

            time--;
        }
        if ((n & 1) == 1) {
            matrix[n >> 1][n >> 1] = val;
        }
        return matrix;
    }
}
